<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:doc="livcos.org/ns/doc"
  xmlns="http://www.w3.org/1999/xhtml"
  exclude-result-prefixes="doc">
	
	<xsl:import href="../default.xsl"/>
	
	<xsl:template match="doc:strong | doc:em | doc:s | doc:u | doc:sup | doc:sub | doc:code">
		<xsl:element name="{local-name(.)}">
			<xsl:apply-templates select="@*|node()"/>
		</xsl:element>
	</xsl:template>
	
	<!-- IE cannot handle XHTML <br></br> -->
	<xsl:template match="doc:br">
		<br xmlns=""/>
	</xsl:template>
	
	<xsl:template match="*">
		<div class="element">
			<xsl:if test="@id">
				<xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
			</xsl:if>
			<xsl:text>&lt;</xsl:text>
			<span class="elementName">
				<xsl:value-of select="name(.)"/>
			</span>
			<xsl:apply-templates select="@*"/>
			<xsl:for-each select="namespace::*[local-name(.) != 'xml']">
				<xsl:variable name="prefix" select="local-name(.)"/>
				<xsl:variable name="nsUri" select="."/>
				<xsl:if test="not(../../namespace::*[(local-name(.) = $prefix) and (. = $nsUri)])">
					<xsl:call-template name="printNS">
						<xsl:with-param name="prefix" select="$prefix"/>
						<xsl:with-param name="nsUri" select="$nsUri"/>
					</xsl:call-template>
				</xsl:if>
			</xsl:for-each>
			<xsl:call-template name="printDefaultNS">
			</xsl:call-template>
			<xsl:if test="not(node())">/</xsl:if>
			<xsl:text>&gt;</xsl:text>
			<xsl:if test="node() and ((normalize-space(.) != '') or * or comment())">
				<div class="elementContent">
					<xsl:apply-templates select="node()"/>
				</div>
			</xsl:if>
		</div>
	</xsl:template>
	
	<xsl:template match="@*">
		<xsl:text> </xsl:text>
		<span>
			<span class="attrName"><xsl:value-of select="name(.)"/></span>
			<xsl:text>="</xsl:text>
			<span class="attrVal"><xsl:value-of select="."/></span>
			<xsl:text>"</xsl:text>
		</span>
	</xsl:template>
	
	<xsl:template name="printDefaultNS">
		<!-- the only way to detect at least some default namespace declarations in XPath 1.0 -->
		<xsl:if test="(namespace-uri(.) = '') and (../namespace::*[local-name() = ''] != '')">
			<xsl:call-template name="printNS">
				<xsl:with-param name="prefix" select="''"/>
				<xsl:with-param name="nsUri" select="''"/>
			</xsl:call-template>
		</xsl:if>
	</xsl:template>
	
	<xsl:template name="printNS">
		<xsl:param name="prefix"/>
		<xsl:param name="nsUri"/>
		<span>
			<xsl:text> xmlns</xsl:text>
			<xsl:if test="$prefix != ''">
				<xsl:text>:</xsl:text>
				<span class="nsPrefix">
					<xsl:value-of select="$prefix"/>
				</span>
			</xsl:if>="<xsl:if test="$nsUri != ''">
				<span class="nsUri">
					<xsl:value-of select="$nsUri"/>
				</span>
			</xsl:if>
			<xsl:text>"</xsl:text>
		</span>
	</xsl:template>
	
</xsl:stylesheet>
